lr16 2.2.0
Loading...
Searching...
No Matches
lr16.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef LR16_H
29#define LR16_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_uart.h"
52
58
63
68
73#define LR16_CMD_AT "AT"
74#define LR16_CMD_RESET "ATZ"
75#define LR16_CMD_GET_LOCAL_TIME "AT+LTIME"
76#define LR16_CMD_GET_BATTERY_LEVEL "AT+BAT"
77#define LR16_CMD_SLEEP "AT+SLEEP"
78#define LR16_CMD_GET_SERIAL_NUMBER "AT+SN"
79#define LR16_CMD_GET_FW_VERSION "AT+FWVER"
80#define LR16_CMD_SET_OPERATING_MODE_USER "AT+MODEUS"
81#define LR16_CMD_SET_OPERATING_MODE_RUNTIME "AT+MODERS"
82#define LR16_CMD_FACTORY_RESET "AT+RUS"
83#define LR16_CMD_STORE_FLASH_CONTEXT "AT+CS"
84#define LR16_CMD_ERASE_FLASH_CONTEXT "AT+RFS"
85#define LR16_CMD_APPLICATION_ID "AT+APPEUI"
86#define LR16_CMD_APPLICATION_KEY "AT+APPKEY"
87#define LR16_CMD_APPLICATION_SESSION_KEY "AT+APPSKEY"
88#define LR16_CMD_NETWORK_SESSION_KEY "AT+NWKSKEY"
89#define LR16_CMD_DEVICE_ADDRESS "AT+DADDR"
90#define LR16_CMD_DEVICE_ID "AT+DEUI"
91#define LR16_CMD_NETWORK_ID "AT+NWKID"
92#define LR16_CMD_GET_LINK_LAYER_VERSION "AT+LLVER"
93#define LR16_CMD_GET_REG_PARAM_VERSION "AT+RPVER"
94#define LR16_CMD_ADAPTIVE_DATA_RATE "AT+ADR"
95#define LR16_CMD_TX_DATA_RATE "AT+DR"
96#define LR16_CMD_DUTY_CYCLE_RESTRICTION "AT+DCS"
97#define LR16_CMD_JOIN_1_DELAY "AT+JN1DL"
98#define LR16_CMD_JOIN_2_DELAY "AT+JN2DL"
99#define LR16_CMD_RX_1_DELAY "AT+RX1DL"
100#define LR16_CMD_RX_2_DELAY "AT+RX2DL"
101#define LR16_CMD_RX_2_DATA_RATE "AT+RX2DR"
102#define LR16_CMD_RX_2_FREQUENCY "AT+RX2FQ"
103#define LR16_CMD_TX_POWER "AT+TXP"
104#define LR16_CMD_PING_SLOT "AT+PGSLOT"
105#define LR16_CMD_JOIN "AT+JOIN"
106#define LR16_CMD_LINK_CHECK "AT+LINKC"
107#define LR16_CMD_SEND "AT+SEND"
108#define LR16_CMD_CLASS "AT+CLASS"
109#define LR16_CMD_START_CERTIFICATION_MODE "AT+CERTIF"
110#define LR16_CMD_START_RF_TONE_TEST "AT+TTONE"
111#define LR16_CMD_START_RF_RSSI_TONE_TEST "AT+TRSSI"
112#define LR16_CMD_TEST_CONFIGURATION "AT+TCONF"
113#define LR16_CMD_START_RF_TX_TEST "AT+TTX"
114#define LR16_CMD_START_RF_RX_TEST "AT+TRX"
115#define LR16_CMD_START_RF_TX_HOOPING_TEST "AT+TTH"
116#define LR16_CMD_STOP_RF_TONE_TEST "AT+TOFF"
117#define LR16_CMD_P2P_UNICAST_TX "AT+P2PUNICASTTX"
118#define LR16_CMD_P2P_UNICAST_EX_TX "AT+P2PUNICASTEXTX"
119#define LR16_CMD_P2P_MULTICAST_TX "AT+P2PMULTICASTTX"
120#define LR16_CMD_P2P_MULTICAST_EX_TX "AT+P2PMULTICASTEXTX"
121#define LR16_CMD_P2P_BROADCAST_TX "AT+P2PBROADCASTTX"
122#define LR16_CMD_P2P_RX "AT+P2PRX"
123#define LR16_CMD_P2P_GPIO_REMOTE_CFG_SET "AT+P2PGPIORCFGSET"
124#define LR16_CMD_P2P_GPIO_REMOTE_CFG_GET "AT+P2PGPIORCFGGET"
125#define LR16_CMD_P2P_GPIO_REMOTE_VALUE_SET "AT+P2PGPIORVALUESET"
126#define LR16_CMD_P2P_GPIO_REMOTE_VALUE_GET "AT+P2PGPIORVALUEGET"
127#define LR16_CMD_P2P_ROLE_USER "AT+P2PROLEUS"
128#define LR16_CMD_P2P_ROLE_RUNTIME "AT+P2PROLERS"
129#define LR16_CMD_P2P_DC_TRACKER_USER "AT+P2PDCTRACKERUS"
130#define LR16_CMD_P2P_DC_TRACKER_RUNTIME "AT+P2PDCTRACKERRS"
131#define LR16_CMD_P2P_DC_ENFORCE_USER "AT+P2PDCENFORCEUS"
132#define LR16_CMD_P2P_DC_ENFORCE_RUNTIME "AT+P2PDCENFORCERS"
133#define LR16_CMD_P2P_RF_PROFILE_USER "AT+P2PRFPROFILEUS"
134#define LR16_CMD_P2P_RF_PROFILE_RUNTIME "AT+P2PRFPROFILERS"
135#define LR16_CMD_P2P_TX_POWER_USER "AT+P2PTXPOWERUS"
136#define LR16_CMD_P2P_TX_POWER_RUNTIME "AT+P2PTXPOWERRS"
137#define LR16_CMD_P2P_RF_CHANNEL_USER "AT+P2PRFCHANNELUS"
138#define LR16_CMD_P2P_RF_CHANNEL_RUNTIME "AT+P2PRFCHANNELRS"
139#define LR16_CMD_P2P_LBT_USER "AT+P2PLBTUS"
140#define LR16_CMD_P2P_LBT_RUNTIME "AT+P2PLBTRS"
141#define LR16_CMD_P2P_MAC_SRC_ADDR_USER "AT+P2PMACSRCADDRUS"
142#define LR16_CMD_P2P_MAC_SRC_ADDR_RUNTIME "AT+P2PMACSRCADDRRS"
143#define LR16_CMD_P2P_MAC_DEST_ADDR_USER "AT+P2PMACDESTADDRUS"
144#define LR16_CMD_P2P_MAC_DEST_ADDR_RUNTIME "AT+P2PMACDESTADDRRS"
145#define LR16_CMD_P2P_MAC_GRP_ID_USER "AT+P2PMACGRPIDUS"
146#define LR16_CMD_P2P_MAC_GRP_ID_RUNTIME "AT+P2PMACGRPIDRS"
147#define LR16_CMD_P2P_MAC_ENC_MODE_USER "AT+P2PMACENCMODEUS"
148#define LR16_CMD_P2P_MAC_ENC_MODE_RUNTIME "AT+P2PMACENCMODERS"
149#define LR16_CMD_P2P_MAC_ENC_KEY_USER "AT+P2PMACENCKEYUS"
150#define LR16_CMD_P2P_MAC_ENC_KEY_RUNTIME "AT+P2PMACENCKEYRS"
151#define LR16_CMD_P2P_MAC_TTL_USER "AT+P2PMACTTLUS"
152#define LR16_CMD_P2P_MAC_TTL_RUNTIME "AT+P2PMACTTLRS"
153#define LR16_CMD_P2P_MAC_ACK_USER "AT+P2PMACACKUS"
154#define LR16_CMD_P2P_MAC_ACK_RUNTIME "AT+P2PMACACKRS"
155#define LR16_CMD_P2P_RP_THRESH_USER "AT+P2PRPTHRESHUS"
156#define LR16_CMD_P2P_RP_THRESH_RUNTIME "AT+P2PRPTHRESHRS"
157#define LR16_CMD_P2P_RP_NUM_SLOTS_USER "AT+P2PRPNUMSLOTSUS"
158#define LR16_CMD_P2P_RP_NUM_SLOTS_RUNTIME "AT+P2PRPNUMSLOTSRS"
159#define LR16_CMD_P2P_CMD_RESP_TIMEOUT_USER "AT+P2PCMDRESPTIMEOUTUS"
160#define LR16_CMD_P2P_CMD_RESP_TIMEOUT_RUNTIME "AT+P2PCMDRESPTIMEOUTRS"
161#define LR16_CMD_P2P_GPIO_REMOTE_BLOCK_CFG_USER "AT+P2PGPIORBLOCKCFGUS"
162#define LR16_CMD_P2P_GPIO_REMOTE_BLOCK_CFG_RUNTIME "AT+P2PGPIORBLOCKCFGRS"
163
168#define LR16_RSP_OK "OK"
169#define LR16_RSP_ERROR "AT_ERROR"
170#define LR16_RSP_PARAM_ERROR "AT_PARAM_ERROR"
171#define LR16_RSP_BUSY_ERROR "AT_BUSY_ERROR"
172#define LR16_RSP_TEST_PARAM_OVERFLOW "AT_TEST_PARAM_OVERFLOW"
173#define LR16_RSP_NO_NETWORK_JOINED "AT_NO_NETWORK_JOINED"
174#define LR16_RSP_RX_ERROR "AT_RX_ERROR"
175#define LR16_RSP_DUTYCYCLE_RESTRICTED "AT_DUTYCYCLE_RESTRICTED"
176#define LR16_RSP_CRYPTO_ERROR "AT_CRYPTO_ERROR"
177#define LR16_RSP_INVALID_MODE "AT_INVALID_MODE"
178#define LR16_RSP_INVALID_ROLE "AT_INVALID_ROLE"
179
184#define LR16_EVT_READY "+SYSNOTF:READY"
185#define LR16_EVT_CONTEXT_STORAGE "+CS:"
186#define LR16_EVT_JOIN "+JOIN:"
187#define LR16_EVT_DATA_RECEIVED "+RXDATA:"
188#define LR16_EVT_RECEIVE_INFO "+RXINFO:"
189#define LR16_EVT_UPLINK_CONFIG "+TXCONF"
190#define LR16_EVT_CLASS_SWITCH "+CLASSUPDATE:"
191#define LR16_EVT_BEACON_INFO "+BEACONINFO:"
192#define LR16_EVT_BEACON_LOST "+BEACONLOST"
193#define LR16_EVT_BEACON_NOT_RECEIVED "+BEACONNOTRECEIVED"
194#define LR16_EVT_P2P_TX_CONF "+P2PTXCONF:"
195#define LR16_EVT_P2P_TX_RESP "+P2PTXRESP:"
196#define LR16_EVT_P2P_TX_TIME "+P2PTXTIME:"
197#define LR16_EVT_P2P_RX_DATA "+P2PRXDATA:"
198#define LR16_EVT_P2P_GPIO_REMOTE_CFG_SET "+P2PGPIORCFGSET:"
199#define LR16_EVT_P2P_GPIO_REMOTE_CFG_GET "+P2PGPIORCFGGET:"
200#define LR16_EVT_P2P_GPIO_REMOTE_VALUE_SET "+P2PGPIORVALUESET:"
201#define LR16_EVT_P2P_GPIO_REMOTE_VALUE_GET "+P2PGPIORVALUEGET:"
202#define LR16_EVT_P2P_GPIO_REMOTE_CFG_CHANGED "+P2PGPIORCFGCHANGED:"
203#define LR16_EVT_P2P_GPIO_REMOTE_VALUE_CHANGED "+P2PGPIORVALUECHANGED:"
204
210#define LR16_TX_DRV_BUFFER_SIZE 200
211#define LR16_RX_DRV_BUFFER_SIZE 600
212 // lr16_cmd
214
219
224
229#define LR16_MAP_MIKROBUS( cfg, mikrobus ) \
230 cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
231 cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
232 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
233 cfg.wup = MIKROBUS( mikrobus, MIKROBUS_PWM );
234 // lr16_map // lr16
237
242typedef struct
243{
244 // Output pins
245 digital_out_t rst;
246 digital_out_t wup;
247
248 // Modules
249 uart_t uart;
250
251 // Buffers
255
256} lr16_t;
257
262typedef struct
263{
264 // Communication gpio pins
265 pin_name_t rx_pin;
266 pin_name_t tx_pin;
267
268 // Additional gpio pins
269 pin_name_t rst;
270 pin_name_t wup;
271
272 // Static variable
273 uint32_t baud_rate;
275 uart_data_bits_t data_bit;
276 uart_parity_t parity_bit;
277 uart_stop_bits_t stop_bit;
278
279} lr16_cfg_t;
280
293
299
310
324err_t lr16_init ( lr16_t *ctx, lr16_cfg_t *cfg );
325
338err_t lr16_generic_write ( lr16_t *ctx, uint8_t *data_in, uint16_t len );
339
352err_t lr16_generic_read ( lr16_t *ctx, uint8_t *data_out, uint16_t len );
353
363void lr16_set_wup_pin ( lr16_t *ctx, uint8_t state );
364
374void lr16_set_rst_pin ( lr16_t *ctx, uint8_t state );
375
385
395void lr16_cmd_run ( lr16_t *ctx, uint8_t *cmd );
396
407void lr16_cmd_set ( lr16_t *ctx, uint8_t *cmd, uint8_t *value );
408
418void lr16_cmd_get ( lr16_t *ctx, uint8_t *cmd );
419
429void lr16_cmd_help ( lr16_t *ctx, uint8_t *cmd );
430
431#ifdef __cplusplus
432}
433#endif
434#endif // LR16_H
435 // lr16
437
438// ------------------------------------------------------------------------ END
#define LR16_TX_DRV_BUFFER_SIZE
LR 16 driver buffer size.
Definition lr16.h:210
#define LR16_RX_DRV_BUFFER_SIZE
Definition lr16.h:211
void lr16_set_rst_pin(lr16_t *ctx, uint8_t state)
LR 16 set RST pin function.
void lr16_cmd_help(lr16_t *ctx, uint8_t *cmd)
LR 16 cmd help function.
err_t lr16_generic_write(lr16_t *ctx, uint8_t *data_in, uint16_t len)
LR 16 data writing function.
void lr16_cfg_setup(lr16_cfg_t *cfg)
LR 16 configuration object setup function.
void lr16_reset_device(lr16_t *ctx)
LR 16 reset device function.
void lr16_cmd_set(lr16_t *ctx, uint8_t *cmd, uint8_t *value)
LR 16 cmd set function.
void lr16_cmd_get(lr16_t *ctx, uint8_t *cmd)
LR 16 cmd get function.
err_t lr16_init(lr16_t *ctx, lr16_cfg_t *cfg)
LR 16 initialization function.
err_t lr16_generic_read(lr16_t *ctx, uint8_t *data_out, uint16_t len)
LR 16 data reading function.
void lr16_cmd_run(lr16_t *ctx, uint8_t *cmd)
LR 16 cmd run function.
void lr16_set_wup_pin(lr16_t *ctx, uint8_t state)
LR 16 set WUP pin function.
lr16_return_value_t
LR 16 Click return value data.
Definition lr16.h:286
@ LR16_OK
Definition lr16.h:287
@ LR16_ERROR
Definition lr16.h:288
@ LR16_ERROR_TIMEOUT
Definition lr16.h:289
@ LR16_ERROR_CMD
Definition lr16.h:290
LR 16 Click configuration object.
Definition lr16.h:263
uint32_t baud_rate
Definition lr16.h:273
pin_name_t wup
Definition lr16.h:270
bool uart_blocking
Definition lr16.h:274
uart_data_bits_t data_bit
Definition lr16.h:275
pin_name_t tx_pin
Definition lr16.h:266
pin_name_t rx_pin
Definition lr16.h:265
uart_stop_bits_t stop_bit
Definition lr16.h:277
uart_parity_t parity_bit
Definition lr16.h:276
pin_name_t rst
Definition lr16.h:269
LR 16 Click context object.
Definition lr16.h:243
uart_t uart
Definition lr16.h:249
uint8_t cmd_buffer[LR16_TX_DRV_BUFFER_SIZE]
Definition lr16.h:254
digital_out_t wup
Definition lr16.h:246
digital_out_t rst
Definition lr16.h:245
uint8_t uart_tx_buffer[LR16_TX_DRV_BUFFER_SIZE]
Definition lr16.h:253
uint8_t uart_rx_buffer[LR16_RX_DRV_BUFFER_SIZE]
Definition lr16.h:252